package com.hksj.ecm.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.hksj.cbm.entity.DeviceInstance;
import com.hksj.cbm.vo.LargeScreenDeviceModelVO;
import com.hksj.ecm.dto.EnergyCockpitBaseDTO;
import com.hksj.ecm.dto.EnergyCockpitDTO;
import com.hksj.ecm.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author fjt
 * @data 2024/8/8 16:58
 * @describe 能耗监测驾驶舱
 */
@Mapper
public interface EnergyCockpitMapper {

    /**
     * 设备概览
     * @param specialityModelCode   专业代码
     * @param productCategoryKey   产品类型代码
     * @return
     */
    List<DeviceInstance> deviceOverView(@Param("dto") EnergyCockpitBaseDTO dto,
                                        @Param("specialityModelCode")String specialityModelCode,
                                        @Param("productCategoryKey")String productCategoryKey);


    /**
     *
     * @param dto 设备位置路径和科室字典明细值
     * @param specialityModelCode   专业编码
     * @param productCategoryKey    产品分类编码
     * @return
     */
    List<DeviceInstance> queryDevice(@Param("dto") EnergyCockpitDTO dto,
                               @Param("specialityModelCode")String specialityModelCode,
                               @Param("productCategoryKey")String productCategoryKey);

    /**
     * 获取指定种类能源的相关产品信息
     * @return
     */
    List<ProductCategoryVO> queryProductCategory(@Param("productCategoryKey")String productCategoryKey);


    /**
     * 查询指定产品的历史能耗(按日、月、年分组统计)
     * @return
     */
    @DS("TAOS")
    List<EnergyTrendHistoryDataVO> queryHistoryData(@Param("dto") EnergyCockpitDTO dto, @Param("tableName")String tableName);


    /**
     * 查询指定的设备集合中，每个设备在指定的时间内的能耗
     * @param dto
     * @return
     */
    @DS("TAOS")
    List<DeviceEnergyVO> queryHistoryEnergyGroupByDeviceId(@Param("dto") EnergyCockpitDTO dto, @Param("tableName")String tableName);

    /**
     * 查询总能耗详情
     * @param deviceList 设备列表
     * @param energyType 能耗类型
     * @return 设备总能耗
     */
    List<EnergyPropertyVO> queryTotalEnergyByDevice(@Param("deviceList") List<String> deviceList,@Param("energyType") String energyType);

    /**
     * 查询指定时间内的能耗详情
     * @param completeStableName 完整的超级表名称
     * @param energyType 能耗类型
     * @param timeType 时间类型
     * @return 指定时间内的能耗详情
     */
    @DS("TAOS")
    List<EnergyPropertyVO> queryEnergyOverPeriodTimeByDevice(@Param("completeStableName") String completeStableName,@Param("energyType") String energyType,@Param("timeType") int timeType);
}
